#-*- coding: utf-8 -*-
import traceback
import aggregatori
from django.http import HttpResponse
from util import generic_converter
from TechWebDjango.media import database_controller
from TechWebDjango.media.database_controller import FARMACIE, SUPERMARKET, SCUOLEMATERNE, POSTE

def farmacie(request, key = None, comp = None, value = None):
    return dispatch_request(request, key, comp, value, FARMACIE)

def scuolematerne(request, key = None, comp = None, value = None):
    return dispatch_request(request, key, comp, value, SCUOLEMATERNE)

def supermarket(request, key = None, comp = None, value = None):
    return dispatch_request(request, key, comp, value, SUPERMARKET)

def poste(request, key = None, comp = None, value = None):
    return dispatch_request(request, key, comp, value, POSTE)

def dispatch_request(request, key, comp, value, db_name):
    try:
        #tipo del database
        mime_type = database_controller.db_format[db_name]
        if key and comp and value:
            #converto il database in un dizionario di Location
            locations = database_controller.get(db_name)
            #filtro il database secondo le specifiche
            filter_locations = aggregatori.compare(key, comp, value, locations)
            #riconverto il dizionario di Location nel formato nativo
            raw_data = generic_converter.convert2rawdata(filter_locations, mime_type)
            #di default il numero della risposta è 200
            response = HttpResponse(raw_data, mime_type)
        else:
            #se non sono specificati tutti i parametri (key,comp,value) allora
            #restituisco il database per intero
            raw_data = database_controller.read_db(db_name)
            response = HttpResponse(raw_data, mime_type)
    except Exception, ex:
        #c'è stato un qualche errore nell'elaborazione della richiesta
        traceback.print_exc()
        response = HttpResponse(str(ex), 'text/plain', 406)
 
    return response

    
